using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TraceNetworkTools
{
    /// <summary>
    /// <para>Set Flow Direction</para>
    /// <para>Sets the flow direction of line features in a version 1 trace network.</para>
    /// <para>设置版本 1 追踪网络中线要素的流动方向。</para>
    /// </summary>    
    [DisplayName("Set Flow Direction")]
    public class SetFlowDirection : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SetFlowDirection()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_trace_network">
        /// <para>Input Trace Network</para>
        /// <para><xdoc>
        ///   <para>The trace network that contains the line feature class on which the flow direction will be set.</para>
        ///   <para>This parameter requires a Trace Network Version 1 as input.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>包含将在其上设置流向的线要素类的追踪网络。</para>
        ///   <para>此参数需要跟踪网络版本 1 作为输入。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_edges">
        /// <para>Feature Layers</para>
        /// <para>The polyline features that participate in the input trace network.</para>
        /// <para>参与输入追踪网络的折线要素。</para>
        /// </param>
        /// <param name="_flow_direction">
        /// <para>Flow Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies the flow direction of the edges.</para>
        ///   <bulletList>
        ///     <bullet_item>With digitized direction—Flow direction will be along the digitized direction of the edges.</bullet_item><para/>
        ///     <bullet_item>Against digitized direction—Flow direction will be against the digitized direction of the edges.</bullet_item><para/>
        ///     <bullet_item>Indeterminate direction—Flow direction will be indeterminate.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定边的流动方向。</para>
        ///   <bulletList>
        ///     <bullet_item>使用数字化方向 - 流动方向将沿边的数字化方向。</bullet_item><para/>
        ///     <bullet_item>逆数字化方向—流动方向将逆着边的数字化方向。</bullet_item><para/>
        ///     <bullet_item>不确定方向—流动方向将不确定。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public SetFlowDirection(object _input_trace_network, List<object> _in_edges, _flow_direction_value? _flow_direction)
        {
            this._input_trace_network = _input_trace_network;
            this._in_edges = _in_edges;
            this._flow_direction = _flow_direction;
        }
        public override string ToolboxName => "Trace Network Tools";

        public override string ToolName => "Set Flow Direction";

        public override string CallName => "tn.SetFlowDirection";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_input_trace_network, _in_edges, _flow_direction.GetGPValue(), _updated_trace_network];

        /// <summary>
        /// <para>Input Trace Network</para>
        /// <para><xdoc>
        ///   <para>The trace network that contains the line feature class on which the flow direction will be set.</para>
        ///   <para>This parameter requires a Trace Network Version 1 as input.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>包含将在其上设置流向的线要素类的追踪网络。</para>
        ///   <para>此参数需要跟踪网络版本 1 作为输入。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Trace Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_trace_network { get; set; }


        /// <summary>
        /// <para>Feature Layers</para>
        /// <para>The polyline features that participate in the input trace network.</para>
        /// <para>参与输入追踪网络的折线要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature Layers")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_edges { get; set; }


        /// <summary>
        /// <para>Flow Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies the flow direction of the edges.</para>
        ///   <bulletList>
        ///     <bullet_item>With digitized direction—Flow direction will be along the digitized direction of the edges.</bullet_item><para/>
        ///     <bullet_item>Against digitized direction—Flow direction will be against the digitized direction of the edges.</bullet_item><para/>
        ///     <bullet_item>Indeterminate direction—Flow direction will be indeterminate.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定边的流动方向。</para>
        ///   <bulletList>
        ///     <bullet_item>使用数字化方向 - 流动方向将沿边的数字化方向。</bullet_item><para/>
        ///     <bullet_item>逆数字化方向—流动方向将逆着边的数字化方向。</bullet_item><para/>
        ///     <bullet_item>不确定方向—流动方向将不确定。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Flow Direction")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _flow_direction_value? _flow_direction { get; set; }

        public enum _flow_direction_value
        {
            /// <summary>
            /// <para>With digitized direction</para>
            /// <para>With digitized direction—Flow direction will be along the digitized direction of the edges.</para>
            /// <para>使用数字化方向 - 流动方向将沿边的数字化方向。</para>
            /// </summary>
            [Description("With digitized direction")]
            [GPEnumValue("WITH_DIGITIZED_DIRECTION")]
            _WITH_DIGITIZED_DIRECTION,

            /// <summary>
            /// <para>Against digitized direction</para>
            /// <para>Against digitized direction—Flow direction will be against the digitized direction of the edges.</para>
            /// <para>逆数字化方向—流动方向将逆着边的数字化方向。</para>
            /// </summary>
            [Description("Against digitized direction")]
            [GPEnumValue("AGAINST_DIGITIZED_DIRECTION")]
            _AGAINST_DIGITIZED_DIRECTION,

            /// <summary>
            /// <para>Indeterminate direction</para>
            /// <para>Indeterminate direction—Flow direction will be indeterminate.</para>
            /// <para>不确定方向—流动方向将不确定。</para>
            /// </summary>
            [Description("Indeterminate direction")]
            [GPEnumValue("INDETERMINATE")]
            _INDETERMINATE,

        }

        /// <summary>
        /// <para>Updated Trace Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Trace Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_trace_network { get; set; }


        public SetFlowDirection SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}